﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SiteAgle.Models;
using SiteAgle.ViewHelper;
using System.IO;

namespace SiteAgle.Controllers
{
    public class ProjetoController : GeneralController
    {
        DaoProjeto dao;
        /// <summary>
        /// Initializes a new instance of the <see cref="ProjetoController"/> class.
        /// </summary>
        public ProjetoController()
        {
            dao = new DaoProjeto();
        }
        //
        // GET: /Projeto/

        /// <summary>
        /// Indexes this instance.
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            return View(dao.listar());
        }

        //
        // GET: /Projeto/Details/5

        /// <summary>
        /// Detailses the specified id.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <returns></returns>
        public ActionResult Details(int id)
        {
            return View(dao.ObterPorID(id));
        }

        //
        // GET: /Projeto/Create

        /// <summary>
        /// Creates this instance.
        /// </summary>
        /// <returns></returns>
        public ActionResult Novo()
        {

            return View(new Projeto());
        }

        //
        // POST: /Projeto/Create

        /// <summary>
        /// Creates the specified projeto.
        /// </summary>
        /// <param name="projeto">The projeto.</param>
        /// <param name="collection">The collection.</param>
        /// <returns></returns>
        [HttpPost]
        public ActionResult Novo(Projeto projeto, FormCollection collection)
        {
            try
            {
                projeto.Usuario = UserHelper.user;

                projeto.GrupoTrabalho = new DaoGrupoTrabalho().ObterPorID(projeto.IdGrupo);
                // TODO: Add insert logic here
                dao.Salvar(projeto);
                foreach (string file in Request.Files)
                {
                    HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase;
                    if (hpf.ContentLength == 0)
                        continue;
                    string savedFileName = Path.Combine(Server.MapPath("~/upload"), "projeto" + projeto.Id + Path.GetExtension(hpf.FileName));
                    hpf.SaveAs(savedFileName);
                    projeto.Foto = String.Format("/upload/{0}", "projeto" + projeto.Id + Path.GetExtension(hpf.FileName)); ;
                    dao.Salvar(projeto);

                }
                Session["sucesso"] = "Projeto criado com Sucesso";
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }


        [HttpPost]
        public void changeProjectCurrent(int idProjeto, FormCollection form)
        {
            UserHelper.ProjetoCurrent = new DaoProjeto().ObterPorID(idProjeto);
            String projet = Request.UrlReferrer.PathAndQuery;
            Response.Redirect(projet);
            // return View();
        }
        //
        // GET: /Projeto/Edit/5

        /// <summary>
        /// Edits the specified id.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <returns></returns>
        public ActionResult Editar(int id)
        {
            return View(dao.ObterPorID(id));
        }

        //
        // POST: /Projeto/Edit/5

        /// <summary>
        /// Edits the specified projeto.
        /// </summary>
        /// <param name="projeto">The projeto.</param>
        /// <param name="id">The id.</param>
        /// <param name="collection">The collection.</param>
        /// <returns></returns>
        [HttpPost]
        public ActionResult Editar(Projeto projeto, int id, FormCollection collection)
        {
            try
            {
                // TODO: Add update logic here
                try
                {
                    Projeto antprojeto = dao.ObterPorID(projeto.Id);
                    antprojeto.GrupoTrabalho = new DaoGrupoTrabalho().ObterPorID(projeto.IdGrupo);
                    antprojeto.Nome = projeto.Nome;
                    antprojeto.Status = projeto.Status;
                    antprojeto.DataInicio = projeto.DataInicio;
                    antprojeto.DataTermino = projeto.DataTermino;
                    // TODO: Add insert logic here
                    
                    foreach (string file in Request.Files)
                    {
                        HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase;
                        if (hpf.ContentLength == 0)
                            continue;
                        string savedFileName = Path.Combine(Server.MapPath("~/upload"), "projeto" + projeto.Id + Path.GetExtension(hpf.FileName));
                        hpf.SaveAs(savedFileName);
                        antprojeto.Foto = String.Format("/upload/{0}", "projeto" + projeto.Id + Path.GetExtension(hpf.FileName)); 
                    }
                    dao.Salvar(antprojeto);
                    Session["sucesso"] = "Salvo com sucesso";
                    return RedirectToAction("Index");
                }
                catch
                {
                    return View();
                }
                dao.Salvar(projeto);
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

      
        // POST: /Projeto/Delete/5

        /// <summary>
        /// Deletes the specified id.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <param name="collection">The collection.</param>
        /// <returns></returns>

        public ActionResult Excluir(int id, FormCollection collection)
        {
            try
            {
                DaoProjeto dao = new DaoProjeto();
                Projeto projeto = dao.ObterPorID(id);
                if (projeto.Sprints.Count() == 0 )
                {
                    dao.Excluir(projeto);
                }
                else
                {
                    Session["Error"] = "Não é possível Excluir esse projeto, pois ele possui dependências!";
                }
    
                // TODO: Add delete logic here
             
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
